package edu.pe.cayetano.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.framework.DAOException;
import edu.pe.cayetano.ws.to.CabeceraUsuarioTO;
import edu.pe.cayetano.ws.to.UsuarioTO;

public class UsuarioDAO extends BaseDAO{


	public UsuarioDAO(Connection cnx) {
		super(cnx);
	}

	public BResult getUsuario(CabeceraUsuarioTO cabeceraTO) throws Exception {

		String 					schema			= "db2admin.";
		UsuarioTO	 			usuarioTO	 	= null;
		PreparedStatement   	pstmt 		 	= null;
		ResultSet 				rs 			 	= null;
		BResult					ret				= null;
		try{
			StringBuffer query  = new StringBuffer();
			
			query.append(" SELECT COD_USUARIO, APE_PATERNO, APE_MATERNO, NOMBRE, USERNAME, PASSWORD, COD_TIPOUSUARIO");
			query.append(" FROM "+schema+"USUARIO WHERE USERNAME=? AND PASSWORD=?");

			pstmt = getConnection().prepareStatement(query.toString());
			System.out.println("getUsuario"+query.toString());
			pstmt.setString(1,cabeceraTO.getUsername());
			pstmt.setString(2,cabeceraTO.getPassword());
			rs=pstmt.executeQuery();
			ret = new BResult();
			if(rs.next()){
				usuarioTO=new UsuarioTO();
				usuarioTO.setCodigo(rs.getString("COD_USUARIO"));
				usuarioTO.setApePaterno(rs.getString("APE_PATERNO"));
				usuarioTO.setApeMaterno(rs.getString("APE_MATERNO"));
				usuarioTO.setNombre(rs.getString("NOMBRE"));
				usuarioTO.setUsername(rs.getString("USERNAME"));
				usuarioTO.setPassword(rs.getString("PASSWORD"));
				usuarioTO.setTipoUsuario(rs.getString("COD_TIPOUSUARIO"));
				ret.setObject(usuarioTO);
				ret.setMessage("exito");
				ret.setCode(0);
			}else{
				usuarioTO=new UsuarioTO();
				ret.setObject(usuarioTO);
				ret.setCode(0);
			}
		}catch(Exception e){
			System.out.println("UsuarioDAO:::buscarUsuario_for_HC:: "+e.getMessage());
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
				rs.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());
			}
		}
		return ret;
	}


	public BResult getListaUsuario() throws Exception {

		String 					schema			= "db2admin.";
		UsuarioTO 				usuarioTO	 	= null;
		PreparedStatement   	pstmt 		 	= null;
		ResultSet 				rs 			 	= null;
		BResult					ret				= null;
		ArrayList				listaUsuario	= new ArrayList();
		try{
			StringBuffer query  = new StringBuffer();
			query.append(" SELECT COD_USUARIO, APE_PATERNO, APE_MATERNO, NOMBRE, USERNAME, PASSWORD, COD_TIPOUSUARIO");
			query.append(" FROM "+schema+"USUARIO");
			pstmt = getConnection().prepareStatement(query.toString());
			System.out.println("getListaUsuario"+query.toString());
			rs=pstmt.executeQuery();
			ret = new BResult();
			while(rs.next()){
				usuarioTO=new UsuarioTO();
				usuarioTO.setCodigo(rs.getString("COD_USUARIO"));
				usuarioTO.setApePaterno(rs.getString("APE_PATERNO"));
				usuarioTO.setApeMaterno(rs.getString("APE_MATERNO"));
				usuarioTO.setNombre(rs.getString("NOMBRE"));
				usuarioTO.setUsername(rs.getString("USERNAME"));
				usuarioTO.setPassword(rs.getString("PASSWORD"));
				usuarioTO.setTipoUsuario(rs.getString("COD_TIPOUSUARIO"));
				listaUsuario.add(usuarioTO);
			}
			if(listaUsuario.size()>0){
				UsuarioTO [] arregloUsuario = new UsuarioTO[listaUsuario.size()];
				for(int i=0;i<listaUsuario.size();i++){
					arregloUsuario[i]= (UsuarioTO)listaUsuario.get(i);
				}
				ret.setObject(arregloUsuario);
				ret.setCode(0);
				ret.setMessage("exito");
			}else{
				ret.setObject(null);
				ret.setCode(-1);
				ret.setMessage("no existen registros de usuarios");
			}
		}catch(Exception e){
			System.out.println("UsuarioDAO:::getListaUsuario:: "+e.getMessage());
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
				rs.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());
			}
		}
		return ret;
	}
}
